目標:串接蝦皮訂單、標籤資訊,目前串接蝦皮 OpenAPI 2.0 版本,串接手冊
串接步驟:
前篇有取得訂單的資料了,這次要來嘗試串接物流單的 API
在取得物流單前,一樣可以先參考一下蝦皮的 API Call Flows 裡的 Arrange Shipment & Get TrackingNo & Print AirwayBill,有清出列出取得物流單的步驟
這次的取得物流單的前提是,蝦皮已經幫我產生物流單號,所以這張圖我們只看下半部即可
最上面的菱形區塊是在問是否要自己設計物流單,如果是的話就走左邊,打 get_shipping_document_info 那個 API,如果不是的話就走右邊然後按照順序執行那四個 API
說明一下,這兩者的差異:
方法 1(左邊):打一個 API,你會獲得物流單上的所有資訊。
方法 2(右邊):打完四個步驟的 API,你獲得可以直接拿來列印的物流單檔案。
這個 API 可以讓你取得物流單的資訊
| 格式 | HTTP/JSON | 
|---|---|
| URL | • 正式區:https://partner.shopeemobile.com/api/v2/logistics/get_shipping_document_info | 
| • 測試區:https://partner.test-stable.shopeemobile.com/api/v2/logistics/get_shipping_document_info | |
| 請求方式 | GET | 
公共參數:
| 參數 | 類型 | 說明 | 
|---|---|---|
| sign | string | access_token、partner_id、api path、shop_id、timestamp HMAC-SHA256 編碼,並用 partner key 當作加密 Key (可參授權商店那一篇) | 
| partner_id | int | Create App 產生的 partner_id (可參Create App 那一篇) | 
| timestamp | int | 時間戳,期限 5 min | 
| access_token | string | 期限 4 小時(可參取得 access token 那一篇) | 
| shop_id | int | 商店 ID(可參授權商店那一篇) | 
業務參數:(因為是 GET,所以要帶到 url 的 query)
| 參數 | 類型 | 說明 | 
|---|---|---|
| order_sn | string | 蝦皮的訂單單號,必填 | 
| package_number | string | 蝦皮的訂單包裹編號,非必填 | 
以 PHP 為例
// 取得託運單資訊
function getShippingDocumentInfo(
	$host,
	$partnerId,
	$partnerKey,
	$timestamp,
	$access_token,
	$shop_id,
	$order_sn
){
	$path='/api/v2/logistics/get_shipping_document_info'; 
	$base_string=strval($partnerId.$path.$timestamp.$access_token.$shop_id);
	$sign=hash_hmac('sha256',$base_string,$partnerKey,false);
	
	$paremeter='&order_sn='.$order_sn;
	$url=$host.$path.'?partner_id='.$partnerId.'×tamp='.$timestamp.'&sign='.$sign.'&access_token='.$access_token.'&shop_id='.$shop_id.$paremeter;
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_HTTPHEADER, [
		'Content-Type: application/json'
	]);
	$res = curl_exec($ch);
	return $res;
}
串接成功後你就會收到物流單對應的資訊,超商物流單上的條碼是已經編譯好的,只要依照各個物流單的規範把資訊對應到相對的位置就可以自製物流單了!
方法 2 直接取得物流單會需要打四個 API:
| URL | 說明 | 請求方式 | 
|---|---|---|
| get_shipping_document_parameter | 取得建議的物流單種類 台灣的話有兩種:- NORMAL_AIR_WAYBILL 普通列印(一頁可以多張標籤) -THERMAL_AIR_WAYBILL 熱感列印(一頁只有一張標籤) | POST | 
| create_shipping_document | 建立物流單 注意:要在 TrackingNo 產生後才能建立,如果狀態已經變成 SHIPPED 就不能再建立 | POST | 
| get_shipping_document_result | 取得建立物流單的結果 結果有 READY, FAILED, PROCESSING | POST | 
| download_shipping_document | 下載物流單 get_shipping_document_result 結果是 READY 才可以下載 | POST | 
(其他詳細內容也可以參考蝦皮的【FAQ】)
如果沒有 create_shipping_document 直接去打 download_shipping_document 是不會有檔案的
所以要乖乖照  API Call Flows 的流程走才會順利取得物流單
以 7-11 店到店為例,download_shipping_document 最後會跳到平常用店到店要列印物流單的畫面,這樣你就可以直接列印物流單了
方法 1 相對來說自由度高一些,因為只會有資訊,你可以用那些資訊排版,然後再自由加上一些你想加的資訊,方法 2 的話,可以直接列印物流單,不用自己排版,相對來說方便一點。
總之兩種方法都各有好處,就看自己要怎麼利用了。
個人覺得蝦皮的 API 除了前面授權取 access token 時需要花一點時間研究,後面串接資料的時有感受到開發者的貼心,請求的參數很彈性,取得資料的欄位也可以自行決定,另外手冊的範例、說明也都蠻清楚,就連印個標籤也有兩種方式讓你選呢!
API Call Flows
【FAQ】Open API_物流相關問題